/*-*
 * FILENAME  :
 *    $HeadURL$
 *
 * STATUS  :
 *    $Revision$
 *
 *    $Author$
 *    $Date$
 *  
 *    
 * Copyright (c) 2011 Gonalge Ltda. All rights reserved.
 *
 ****************************************************************/

package org.gonalge.rompecabeza.servidor;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;

import java.awt.Font;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.gonalge.rompecabeza.pintado.PintarOpciones;
import org.gonalge.rompecabeza.util.FormUtils;

/**
 * 
 * @author Geremias Gonzalez
 */
public class FormOpciones extends JDialog implements ActionListener {

    /**
     * 
     */
    private static final long serialVersionUID = -4293973853883521858L;

    private static final Log LOG = LogFactory.getLog(FormOpciones.class);

    private final JComboBox fila = new JComboBox();;

    private final JComboBox columna = new JComboBox();;

    private final PintarOpciones pintado = new PintarOpciones(this);

    private final JButton aceptarButton = new JButton("Aceptar");

    private final JButton cancelarButton = new JButton("Cancelar");

    private boolean aceptar = false;

    private FormServidor servidor = null;

    private int fil, col, img;

    public FormOpciones(FormServidor pS) {
        this(null, "Opciones de Juego", false, pS);
    }

    public FormOpciones(Frame parent, String title, boolean modal, FormServidor servidor) {
        super(parent, title, modal);
        try {
            this.servidor = servidor;
            jbInit();
            pintado.setImagen(servidor.getImg());
        } catch (Exception e) {
            LOG.error("General ", e);
        }
    }

    private void jbInit() throws Exception {

        this.getContentPane().setLayout(null);
        Rectangle rec = FormUtils.centarRectangle(750, 400);
        this.setBounds(rec.x + 450, rec.y, 300, 300);
        addObjetos();
        addEventos();

    }

    private void addObjetos() {

        this.setResizable(false);

        fila.addItem("3 Fil");
        fila.addItem("4 Fil");
        fila.addItem("5 Fil");
        fila.addItem("6 Fil");
        fila.addItem("7 Fil");

        columna.addItem("3 Col");
        columna.addItem("4 Col");
        columna.addItem("5 Col");
        columna.addItem("6 Col");
        columna.addItem("7 Col");

        fila.setSelectedIndex(0);
        columna.setSelectedIndex(0);

        pintado.setBounds(new Rectangle(0, 0, getWidth() - 5, getHeight() - 60));
        fila.setBounds(0, getHeight() - 60, 60, 28);
        fila.setFont(new Font("Arial", 0, 11));

        columna.setBounds(60, getHeight() - 60, 60, 28);
        columna.setFont(new Font("Arial", 0, 11));

        aceptarButton.setBounds(120, getHeight() - 60, 85, 28);
        cancelarButton.setBounds(205, getHeight() - 60, 90, 28);

        this.getContentPane().add(aceptarButton);
        this.getContentPane().add(cancelarButton);

        this.getContentPane().add(fila);
        this.getContentPane().add(columna);

        this.getContentPane().add(pintado);
        this.setTitle("Opciones del Juego");
        this.setVisible(true);

    }

    private void addEventos() {
        aceptarButton.addActionListener(this);
        cancelarButton.addActionListener(this);
        fila.addActionListener(this);
        columna.addActionListener(this);

    }

    public boolean getAceptar() {
        return aceptar;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        aceptar = e.getSource().equals(aceptarButton);
        if (e.getSource().equals(fila) || e.getSource().equals(columna)) {
            servidor.setFilCol(fila.getSelectedIndex() + 3, columna.getSelectedIndex() + 3);

        } else if (e.getSource().equals(aceptarButton)) {
            servidor.setConfirmarJuego(fil, col, img);
            setVisible(false);

        } else if (e.getSource().equals(cancelarButton)) {
            servidor.setImagen(img);
            servidor.setFilCol(fil, col);
            setVisible(false);
        }
    }

    public void setOpciones(int f, int c, int im) {

        fila.setSelectedIndex(f - 3);
        columna.setSelectedIndex(c - 3);

        this.fil = f;
        this.col = c;
        this.img = im;
        pintado.setImagen(im);
    }

    public void setImagenDibujo(int img) {
        servidor.setImagen(img);
    }
}
